﻿#include "stdafx.h"
#include "sbhs.h"

//
extern void _k_type_init(void);
extern void _k_type_disp(void);
extern void _k_hs_init(void);
extern void _k_hs_disp(void);


//////////////////////////////////////////////////////////////////////////
// 타입 
static struct kTypeMain
{
	kcham isinit;
	kMutex* lock;
} k_type_main=
{
	FALSE,
};

//
static void _kh_disp(kpointer ptr)
{
	if (!k_type_main.isinit)
		return;

	//
	k_mutex_enter(k_type_main.lock);
	_k_hs_disp();
	_k_type_disp();
	k_mutex_leave(k_type_main.lock);

	//
	k_mutex_delete(k_type_main.lock);

	k_type_main.isinit = FALSE;

#ifdef _SB_WINDOWS_
	if (k_candebug())
		OutputDebugStringA("[~sbhs]\n");
#endif
}

//
static void _kh_init(void)
{
	k_type_main.isinit = TRUE;
	k_type_main.lock = k_mutex_new();

	//
	_k_type_init();
	_k_hs_init();

	//
	k_atexit_p(_kh_disp, NULL);

#ifdef _SB_WINDOWS_
	if (k_candebug())
		OutputDebugStringA("[@sbhs]\n");
#endif
}

/// <summary>HS, 타입 라이브러리 초가화.</summary>
/// <remarks>KSH, 2013-12-22.</remarks>
void kh_init(void)
{
	if (!k_type_main.isinit)
		_kh_init();
}

/// <summary>HS, 타입 라이브러리 잠금.</summary>
/// <remarks>KSH, 2013-12-22.</remarks>
void kh_lock()
{
	kh_init();
	k_mutex_enter(k_type_main.lock);
}

/// <summary>HS, 타입 라이브러리 잠금 해제.</summary>
/// <remarks>KSH, 2013-12-22.</remarks>
void kh_unlock()
{
	kh_init();
	k_mutex_leave(k_type_main.lock);
}

